/**
 * 网站配置接口
 */
export interface SiteConfig {
    /** 网站域名或URL匹配模式 */
    pattern: string
    /** anchor选择器 */
    anchor: string
    /** 网站名称（可选，用于调试） */
    name?: string
    /** 是否启用（默认true） */
    enabled?: boolean
}

/**
 * 默认的网站配置列表
 * 你可以根据需要添加更多网站配置
 */
export const SITE_CONFIGS: SiteConfig[] = [
    // 医疗相关网站示例
    {
        pattern: '*://app.alihealth.cn/prescriptionplatform_v2',
        anchor: '.layout_main_content',
        name: '医院官网',
        enabled: true
    },
    {
        pattern: '*://mms.pinduoduo.com/chat-merchant/*',
        anchor: '.other-container',
        name: '医疗中心',
        enabled: true
    },
    {
        pattern: '*://*.clinic.com/*',
        anchor: '#content-area',
        name: '诊所网站',
        enabled: true
    },
    // 通用网站配置
    {
        pattern: '*://*.example.com/*',
        anchor: '.container',
        name: '示例网站',
        enabled: true
    },
    // 默认配置（最后匹配）
    {
        pattern: '<all_urls>',
        anchor: 'body',
        name: '默认配置',
        enabled: true
    }
]

/**
 * 根据当前URL获取匹配的网站配置
 * @param url 当前页面URL
 * @returns 匹配的网站配置，如果没有匹配则返回默认配置
 */
export function getSiteConfig(url: string): SiteConfig {
    // 遍历配置列表，找到第一个匹配的配置
    for (const config of SITE_CONFIGS) {
        if (!config.enabled) continue

        if (config.pattern === '<all_urls>') {
            // 如果是通配符，直接匹配
            return config
        }

        if (matchPattern(config.pattern, url)) {
            return config
        }
    }

    // 如果没有找到匹配的配置，返回默认配置
    return SITE_CONFIGS[SITE_CONFIGS.length - 1]
}

/**
 * 检查URL是否匹配指定的模式
 * @param pattern 匹配模式（支持通配符 * ）
 * @param url 要检查的URL
 * @returns 是否匹配
 */
function matchPattern(pattern: string, url: string): boolean {
    // 将模式转换为正则表达式
    const regexPattern = pattern
        .replace(/\./g, '\\.') // 转义点号
        .replace(/\*/g, '.*') // 将 * 转换为 .*

    const regex = new RegExp(`^${regexPattern}$`, 'i')
    return regex.test(url)
}

/**
 * 动态添加网站配置
 * @param config 新的网站配置
 */
export function addSiteConfig(config: SiteConfig): void {
    // 插入到默认配置之前
    const defaultIndex = SITE_CONFIGS.findIndex((c) => c.pattern === '<all_urls>')
    if (defaultIndex > -1) {
        SITE_CONFIGS.splice(defaultIndex, 0, config)
    } else {
        SITE_CONFIGS.push(config)
    }
}

/**
 * 获取当前页面的最佳anchor选择器
 * @param url 当前页面URL（可选，默认使用window.location.href）
 * @returns anchor选择器字符串
 */
export function getCurrentAnchor(url?: string): string {
    const currentUrl = url || window.location.href
    const config = getSiteConfig(currentUrl)
    return config.anchor
}

/**
 * 验证anchor选择器是否存在于页面中
 * @param anchor anchor选择器
 * @returns 是否存在
 */
export function validateAnchor(anchor: string): boolean {
    try {
        const element = document.querySelector(anchor)
        return element !== null
    } catch (error) {
        console.warn(`Invalid anchor selector: ${anchor}`, error)
        return false
    }
}

/**
 * 获取有效的anchor选择器
 * 如果主anchor不存在，会尝试备选方案
 * @param url 当前页面URL（可选）
 * @returns 有效的anchor选择器
 */
export function getValidAnchor(url?: string): string {
    const primaryAnchor = getCurrentAnchor(url)

    // 首先尝试主要的anchor
    if (validateAnchor(primaryAnchor)) {
        return primaryAnchor
    }

    // 如果主要anchor不存在，尝试常见的备选方案
    const fallbackAnchors = ['main', '#main', '.main', '#content', '.content', '.container', '#container', 'body']

    for (const fallback of fallbackAnchors) {
        if (validateAnchor(fallback)) {
            console.warn(`Primary anchor "${primaryAnchor}" not found, using fallback: "${fallback}"`)
            return fallback
        }
    }

    // 最后的备选方案
    return 'body'
}
